home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / include / qcleanuphandler.h.z / qcleanuphandler.h
C/C++ Source or Header  |  2002-04-08  |  2KB  |  93 lines

  1. #ifndef QCLEANUPHANDLER_H
  2. #define QCLEANUPHANDLER_H
  3.  
  4. #ifndef QT_H
  5. #include <qptrlist.h>
  6. #endif // QT_H
  7.  
  8. template<class Type>
  9. class Q_EXPORT QCleanupHandler
  10. {
  11. public:
  12.     QCleanupHandler() : cleanupObjects( 0 ) {}
  13.     ~QCleanupHandler() { clear(); }
  14.  
  15.     Type* add( Type **object ) {
  16.     if ( !cleanupObjects )
  17.         cleanupObjects = new QPtrList<Type*>;
  18.     cleanupObjects->insert( 0, object );
  19.     return *object;
  20.     }
  21.  
  22.     void remove( Type **object ) {
  23.     if ( !cleanupObjects )
  24.         return;
  25.     if ( cleanupObjects->findRef( object ) >= 0 )
  26.         (void) cleanupObjects->take();
  27.     }
  28.  
  29.     bool isEmpty() const {
  30.     return cleanupObjects ? cleanupObjects->isEmpty() : TRUE;
  31.     }
  32.  
  33.     void clear() {
  34.     if ( !cleanupObjects )
  35.         return;
  36.     QPtrListIterator<Type*> it( *cleanupObjects );
  37.     Type **object;
  38.     while ( ( object = it.current() ) ) {
  39.         delete *object;
  40.         *object = 0;
  41.         cleanupObjects->remove( object );
  42.     }
  43.     delete cleanupObjects;
  44.     cleanupObjects = 0;
  45.     }
  46.  
  47. private:
  48.     QPtrList<Type*> *cleanupObjects;
  49. };
  50.  
  51. template<class Type>
  52. class Q_EXPORT QSingleCleanupHandler
  53. {
  54. public:
  55.     QSingleCleanupHandler() : object( 0 ) {}
  56.     ~QSingleCleanupHandler() {
  57.     if ( object ) {
  58.         delete *object;
  59.         *object = 0;
  60.     }
  61.     }
  62.     Type* set( Type **o ) {
  63.     object = o;
  64.     return *object;
  65.     }
  66.     void reset() { object = 0; }
  67. private:
  68.     Type **object;
  69. };
  70.  
  71. template<class Type>
  72. class Q_EXPORT QSharedCleanupHandler
  73. {
  74. public:
  75.     QSharedCleanupHandler() : object( 0 ) {}
  76.     ~QSharedCleanupHandler() {
  77.     if ( object ) {
  78.         if ( (*object)->deref() )
  79.         delete *object;
  80.         *object = 0;
  81.     }
  82.     }
  83.     Type* set( Type **o ) {
  84.     object = o;
  85.     return *object;
  86.     }
  87.     void reset() { object = 0; }
  88. private:
  89.     Type **object;
  90. };
  91.  
  92. #endif //QCLEANUPHANDLER_H
  93.